/**
 * Base class for cloud provider implementations.
 *
 * All cloud providers should inherit from this class and implement
 * the required sandbox management methods.
 */
export abstract class BaseProvider {
  /**
   * Create a new sandbox instance.
   *
   * @param functionId - The function ID for the sandbox
   * @param kwargs - Additional parameters for sandbox creation
   * @returns The response containing sandbox creation details
   */
  abstract createSandbox(functionId: string, ...kwargs: any[]): Promise<any>;

  /**
   * Delete an existing sandbox instance.
   *
   * @param functionId - The function ID of the sandbox
   * @param sandboxId - The ID of the sandbox to delete
   * @param kwargs - Additional parameters for sandbox deletion
   * @returns The response containing deletion status
   */
  abstract deleteSandbox(functionId: string, sandboxId: string, ...kwargs: any[]): Promise<any>;

  /**
   * Get details of an existing sandbox instance.
   *
   * @param functionId - The function ID of the sandbox
   * @param sandboxId - The ID of the sandbox to retrieve
   * @param kwargs - Additional parameters for sandbox retrieval
   * @returns The response containing sandbox details
   */
  abstract getSandbox(functionId: string, sandboxId: string, ...kwargs: any[]): Promise<any>;

  /**
   * List all sandbox instances for a function.
   *
   * @param functionId - The function ID to list sandboxes for
   * @param kwargs - Additional parameters for listing sandboxes
   * @returns The response containing list of sandboxes
   */
  abstract listSandboxes(functionId: string, ...kwargs: any[]): Promise<any>;
}
